home *** CD-ROM | disk | FTP | other *** search
- type
- mask = array[0..6] of byte ;
- xmit = array[0..6] of real ;
- chlo = array[0..4] of byte ;
-
-
- const
- _6845_Index = $3D4 ;
- _6845_Data = $3D5 ;
- ModeControl = $3D8 ;
- red : mask = ($00,$40,$04,$C0,$0C,$44,$CC) ;
- green: mask = ($00,$20,$02,$A0,$0A,$22,$AA) ;
- blue : mask = ($00,$10,$01,$90,$09,$11,$99) ;
- BC : xmit = (1.0,0.75,0.50,0.25,0.0,0.0,0.0) ;
- FC : xmit = (0.0,0.25,0.50,0.75,1.0,0.0,0.0) ;
- BV : xmit = (0.0,0.65,0.0,1.0,0.0,0.65,1.0) ;
- FV : xmit = (0.0,0.0,0.65,0.0,1.0,0.65,1.0) ;
- chctr: chlo = (32,176,177,178,219) ;
- MaxC = 6 ;
-
- var
- screen : array[0..15999,0..1] of byte absolute $B000:$8000 ;
- hue : array[0..MaxC,0..MaxC,0..MaxC] of byte ;
- inten : array[0..MaxC,0..MaxC,0..MaxC] of byte ;
- colorfile : file of byte ;
-
- function bbght(n:integer):boolean ;
- begin
- if (n=3) or (n=6) then bbght := true else bbght := false ;
- end ;
-
- function bdim(n:integer):boolean ;
- begin
- if (n=1) or (n=5) then bdim := true else bdim := false ;
- end ;
-
- function fbght(n:integer):boolean ;
- begin
- if (n=4) or (n=6) then fbght := true else fbght := false ;
- end ;
-
- function fdim(n:integer):boolean ;
- begin
- if (n=2) or (n=5) then fdim := true else fdim := false ;
- end ;
-
-
-
- function exclude (r,g,b:integer) : boolean ;
- var
- ex : boolean ;
- begin
- ex := false ;
- if bbght(r) and (bdim(g) or bdim(b)) then ex := true ;
- if fbght(r) and (fdim(g) or fdim(b)) then ex := true ;
- if bbght(g) and (bdim(r) or bdim(b)) then ex := true ;
- if fbght(g) and (fdim(r) or fdim(b)) then ex := true ;
- if bbght(b) and (bdim(g) or bdim(r)) then ex := true ;
- if fbght(b) and (fdim(g) or fdim(r)) then ex := true ;
- exclude := ex ;
- end ;
-
- procedure noblink ;
- begin
- port[$3D8] := 9 ;
- end ;
-
- var
- r,g,b,i,ir,ig,ib,rm,gm,bm,x : integer ;
- ri,gi,bi,delta : real ;
- rdelta,gdelta,bdelta : real ;
- ch,c : byte ;
- begin
- noblink ;
- assign(colorfile,'COLOR.DAT');
- rewrite(colorfile) ;
- for r := 0 to MaxC do
- begin
- for g := 0 to MaxC do
- begin
- for b := 0 to MaxC do
- begin
- TextColor(15) ;
- write('Color ',r,',',g,',',b,' = ');
- ri := r / MaxC ;
- bi := b / MaxC ;
- gi := g / MaxC ;
- rm := 0 ;
- bm := 0 ;
- gm := 0 ;
- ch := 0 ;
- delta := 1e30 ;
- for i := 0 to 4 do
- begin
- for ir := 0 to 6 do
- begin
- for ig := 0 to 6 do
- begin
- for ib := 0 to 6 do
- if not exclude(ir,ig,ib) then
- begin
- rdelta := abs(BC[i]*BV[ir]+FC[i]*FV[ir]-ri) ;
- gdelta := abs(BC[i]*BV[ig]+FC[i]*FV[ig]-gi) ;
- bdelta := abs(BC[i]*BV[ib]+FC[i]*FV[ib]-bi) ;
- if (rdelta+gdelta+bdelta) < delta then
- begin
- rm := ir ;
- bm := ib ;
- gm := ig ;
- ch := i ;
- delta := rdelta+gdelta+bdelta ;
- end ;
- end ;
- end ;
- end ;
- end ;
- hue[r,g,b] := red[rm] or blue[bm] or green[gm] ;
- inten[r,g,b] := chctr[ch] ;
- Write(colorfile,hue[r,g,b],inten[r,g,b]) ;
- TextColor(hue[r,g,b] mod 16) ;
- if hue[r,g,b]>127 then TextColor(hue[r,g,b] mod 16+16) ;
- TextBackground((hue[r,g,b] div 16) mod 8) ;
- for x := 1 to 40 do Write(chr(inten[r,g,b])) ;
- TextColor(15) ;
- TextBackground(0) ;
- Writeln(hue[r,g,b],':',inten[r,g,b]) ;
- end ;
- end ;
- end ;
- Close(ColorFile) ;
- end .